<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    
    <title>Linux 时间标准 | jouyouyun&#39;s blog</title>
    <meta name="viewport" content="width=device-width,minimum-scale=1">
    <meta name="description" content="系统如何设置时间

开机时根据硬件时钟来设置系统时钟.
如果开启了 NTP 服务, 会根据网络时间来校正系统时钟，确保时间准确.
关机时会根据系统时钟来设置硬件时钟(localtime 标准除外).

时钟

硬件时钟: 即实时时钟 RTC 或 CMOS 时钟, 仅能保存年、月、日、时、分、秒这些时间数值，无法保存时间标准和是否使用夏令时调节.
系统时钟: 即软件时间, 与硬件时间分别维护，保存了时间、时区和夏令时设置.初始系统时钟是从硬件时间计算得来，计算时会考虑 /etc/adjtime 的设置.
/etc/adjtime: 这个文件中记录了时区标准和时间偏移, 根据硬件时钟设置系统时间和设置硬件时钟都会根据时间偏移来计算的.所有的时钟都是有误差的，但是一般有固定的偏移, 这种于基值的差称为“time skew”或“时间偏移”.
">
    <meta name="generator" content="Hugo 0.105.0">
    
    
    
    
      <meta name="robots" content="noindex, nofollow">
    

    
<link rel="stylesheet" href="/ananke/css/main.min.css" >



    
    
    
      

    

    
    
    <meta property="og:title" content="Linux 时间标准" />
<meta property="og:description" content="系统如何设置时间

开机时根据硬件时钟来设置系统时钟.
如果开启了 NTP 服务, 会根据网络时间来校正系统时钟，确保时间准确.
关机时会根据系统时钟来设置硬件时钟(localtime 标准除外).

时钟

硬件时钟: 即实时时钟 RTC 或 CMOS 时钟, 仅能保存年、月、日、时、分、秒这些时间数值，无法保存时间标准和是否使用夏令时调节.
系统时钟: 即软件时间, 与硬件时间分别维护，保存了时间、时区和夏令时设置.初始系统时钟是从硬件时间计算得来，计算时会考虑 /etc/adjtime 的设置.
/etc/adjtime: 这个文件中记录了时区标准和时间偏移, 根据硬件时钟设置系统时间和设置硬件时钟都会根据时间偏移来计算的.所有的时钟都是有误差的，但是一般有固定的偏移, 这种于基值的差称为“time skew”或“时间偏移”.
" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://jouyouyun.github.io/post/linux-time-standard/" /><meta property="article:section" content="post" />
<meta property="article:published_time" content="2018-08-27T21:38:21+08:00" />
<meta property="article:modified_time" content="2019-02-12T14:35:18+08:00" />

<meta itemprop="name" content="Linux 时间标准">
<meta itemprop="description" content="系统如何设置时间

开机时根据硬件时钟来设置系统时钟.
如果开启了 NTP 服务, 会根据网络时间来校正系统时钟，确保时间准确.
关机时会根据系统时钟来设置硬件时钟(localtime 标准除外).

时钟

硬件时钟: 即实时时钟 RTC 或 CMOS 时钟, 仅能保存年、月、日、时、分、秒这些时间数值，无法保存时间标准和是否使用夏令时调节.
系统时钟: 即软件时间, 与硬件时间分别维护，保存了时间、时区和夏令时设置.初始系统时钟是从硬件时间计算得来，计算时会考虑 /etc/adjtime 的设置.
/etc/adjtime: 这个文件中记录了时区标准和时间偏移, 根据硬件时钟设置系统时间和设置硬件时钟都会根据时间偏移来计算的.所有的时钟都是有误差的，但是一般有固定的偏移, 这种于基值的差称为“time skew”或“时间偏移”.
"><meta itemprop="datePublished" content="2018-08-27T21:38:21+08:00" />
<meta itemprop="dateModified" content="2019-02-12T14:35:18+08:00" />
<meta itemprop="wordCount" content="393">
<meta itemprop="keywords" content="timezone,localtime,rtc,utc," /><meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Linux 时间标准"/>
<meta name="twitter:description" content="系统如何设置时间

开机时根据硬件时钟来设置系统时钟.
如果开启了 NTP 服务, 会根据网络时间来校正系统时钟，确保时间准确.
关机时会根据系统时钟来设置硬件时钟(localtime 标准除外).

时钟

硬件时钟: 即实时时钟 RTC 或 CMOS 时钟, 仅能保存年、月、日、时、分、秒这些时间数值，无法保存时间标准和是否使用夏令时调节.
系统时钟: 即软件时间, 与硬件时间分别维护，保存了时间、时区和夏令时设置.初始系统时钟是从硬件时间计算得来，计算时会考虑 /etc/adjtime 的设置.
/etc/adjtime: 这个文件中记录了时区标准和时间偏移, 根据硬件时钟设置系统时间和设置硬件时钟都会根据时间偏移来计算的.所有的时钟都是有误差的，但是一般有固定的偏移, 这种于基值的差称为“time skew”或“时间偏移”.
"/>

	
  </head>

  <body class="ma0 avenir bg-near-white">

    
   
  

  <header>
    <div class="bg-black">
      <nav class="pv3 ph3 ph4-ns" role="navigation">
  <div class="flex-l justify-between items-center center">
    <a href="/" class="f3 fw2 hover-white no-underline white-90 dib">
      
        jouyouyun&#39;s blog
      
    </a>
    <div class="flex-l items-center">
      

      
        <ul class="pl0 mr3">
          
          <li class="list f5 f4-ns fw4 dib pr3">
            <a class="hover-white no-underline white-90" href="/post/" title="Archives 页">
              Archives
            </a>
          </li>
          
          <li class="list f5 f4-ns fw4 dib pr3">
            <a class="hover-white no-underline white-90" href="/tags/" title="Tags 页">
              Tags
            </a>
          </li>
          
          <li class="list f5 f4-ns fw4 dib pr3">
            <a class="hover-white no-underline white-90" href="/categories/" title="Categories 页">
              Categories
            </a>
          </li>
          
        </ul>
      
      
<div class="ananke-socials">
  
    <a href="https://github.com/jouyouyun" target="_blank" class="github ananke-social-link link-transition stackoverflow link dib z-999 pt3 pt0-l mr1" title="GitHub link" rel="noopener" aria-label="follow on GitHub——Opens in a new window">
      
        <span class="icon"><svg style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512"  xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
  <path d="M256,32C132.3,32,32,134.8,32,261.7c0,101.5,64.2,187.5,153.2,217.9c11.2,2.1,15.3-5,15.3-11.1   c0-5.5-0.2-19.9-0.3-39.1c-62.3,13.9-75.5-30.8-75.5-30.8c-10.2-26.5-24.9-33.6-24.9-33.6c-20.3-14.3,1.5-14,1.5-14   c22.5,1.6,34.3,23.7,34.3,23.7c20,35.1,52.4,25,65.2,19.1c2-14.8,7.8-25,14.2-30.7c-49.7-5.8-102-25.5-102-113.5   c0-25.1,8.7-45.6,23-61.6c-2.3-5.8-10-29.2,2.2-60.8c0,0,18.8-6.2,61.6,23.5c17.9-5.1,37-7.6,56.1-7.7c19,0.1,38.2,2.6,56.1,7.7   c42.8-29.7,61.5-23.5,61.5-23.5c12.2,31.6,4.5,55,2.2,60.8c14.3,16.1,23,36.6,23,61.6c0,88.2-52.4,107.6-102.3,113.3   c8,7.1,15.2,21.1,15.2,42.5c0,30.7-0.3,55.5-0.3,63c0,6.1,4,13.3,15.4,11C415.9,449.1,480,363.1,480,261.7   C480,134.8,379.7,32,256,32z"/>
</svg>
</span>
      
<span class="new-window"><svg  height="8px"  style="enable-background:new 0 0 1000 1000;" version="1.1" viewBox="0 0 1000 1000"  xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
<path d="M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z" style="fill-rule:evenodd;clip-rule:evenodd;"/>
</svg>
</span></a>
  
</div>

    </div>
  </div>
</nav>

    </div>
  </header>



    <main class="pb7" role="main">
      
  
  <article class="flex-l flex-wrap justify-between mw8 center ph3">
    <header class="mt4 w-100">
      <aside class="instapaper_ignoref b helvetica tracked">
          
        POSTS
      </aside>
      










  <div id="sharing" class="mt3 ananke-socials">
    
  </div>


      <h1 class="f1 athelas mt3 mb1">Linux 时间标准</h1>
      
      <p class="tracked">
         <strong>jouyouyun</strong>
      </p>
      
      
      
      <time class="f6 mv4 dib tracked" datetime="2018-08-27T21:38:21+08:00">八月 27, 2018</time>
      

      
      
    </header>
    <div class="nested-copy-line-height lh-copy serif f4 nested-links mid-gray pr4-l w-two-thirds-l"><h2 id="系统如何设置时间">系统如何设置时间</h2>
<ol>
<li>开机时根据硬件时钟来设置系统时钟.</li>
<li>如果开启了 <code>NTP</code> 服务, 会根据网络时间来校正系统时钟，确保时间准确.</li>
<li>关机时会根据系统时钟来设置硬件时钟(<code>localtime</code> 标准除外).</li>
</ol>
<h3 id="时钟">时钟</h3>
<ul>
<li>硬件时钟: 即实时时钟 <code>RTC</code> 或 <code>CMOS</code> 时钟, 仅能保存年、月、日、时、分、秒这些时间数值，无法保存时间标准和是否使用夏令时调节.</li>
<li>系统时钟: 即软件时间, 与硬件时间分别维护，保存了时间、时区和夏令时设置.初始系统时钟是从硬件时间计算得来，计算时会考虑 <code>/etc/adjtime</code> 的设置.</li>
<li><code>/etc/adjtime</code>: 这个文件中记录了时区标准和时间偏移, 根据硬件时钟设置系统时间和设置硬件时钟都会根据时间偏移来计算的.所有的时钟都是有误差的，但是一般有固定的偏移, 这种于基值的差称为“time skew”或“时间偏移”.</li>
</ul>
<hr>
<h3 id="时间标准">时间标准</h3>
<ul>
<li><code>UTC</code> 是与时区无关的全球时间标准, 会根据夏令时自动调整时间, <strong><strong>推荐使用</strong></strong>.</li>
<li><code>localtime</code> 则依赖于当前时区, 不会根据夏令时自动调整.</li>
</ul>
<p>通常在 <code>window+linux</code> 双系统中遇到的时间问题就是使用的时间标准不一致导致的，只要将两个系统的时间标准调成一致的，就能解决此问题，推荐将 <code>window</code> 的时间标准改为 <code>UTC</code> 。</p>
<hr>
<h3 id="示例">示例</h3>
<p>假设当前 <code>RTC</code> 时间为 <code>12:00</code>, 时区为 <code>Asia/Shanghai</code>, 时区的 <code>offset</code> 为8, 两种不同的时间标准的处理如下:</p>
<ul>
<li><code>UTC</code> 时间标准: 系统开机时会根据 <code>RTC</code> 时间和时区的 <code>offset</code> 将系统时间调整为 <code>20:00</code>, <code>UTC</code> 时区的时间为 <code>12:00</code>, 关机时使用 <code>UTC</code> 的时间来设置 <code>RTC</code>.</li>
<li><code>localtime</code> 时间标准: 开始时根据 <code>RTC</code> 和时区 <code>offset</code>, 将系统时间调整为 <code>12:00</code>, <code>UTC</code> 时区的时间为 <code>04:00</code>, 关机时不再设置 <code>RTC</code>.</li>
</ul>
<p>如果开启了 <code>NTP</code> 服务, 系统会在运行时通过网络时间校准本机的 <code>UTC</code> 时间, 本机的 <code>UTC</code> 时间改变后, 系统时钟的时间也会跟着改变. 所以建议开启 <code>NTP</code> 服务, 这能保证时间的准确性，
但如果采用的是 <code>localtime</code> 时间标准，在 <code>NTP</code> 同步后不会修改 <code>RTC</code> 时间。</p>
<hr>
<h2 id="systemd-时间服务">systemd 时间服务</h2>
<h3 id="timedatectl">timedatectl</h3>
<p>用来查询和设置系统时间的命令, 使用方法如下:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>timedatectl <span style="color:#f92672">[</span>OPTIONS...<span style="color:#f92672">]</span> COMMAND ...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Query or change system time and date settings.
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>-h --help                Show this help message
</span></span><span style="display:flex;"><span>--version             Show package version
</span></span><span style="display:flex;"><span>--no-pager            Do not pipe output into a pager
</span></span><span style="display:flex;"><span>--no-ask-password     Do not prompt <span style="color:#66d9ef">for</span> password
</span></span><span style="display:flex;"><span>-H --host<span style="color:#f92672">=[</span>USER@<span style="color:#f92672">]</span>HOST    Operate on remote host
</span></span><span style="display:flex;"><span>-M --machine<span style="color:#f92672">=</span>CONTAINER   Operate on local container
</span></span><span style="display:flex;"><span>--adjust-system-clock Adjust system clock when changing local RTC mode
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Commands:
</span></span><span style="display:flex;"><span>status                   Show current time settings
</span></span><span style="display:flex;"><span>set-time TIME            Set system time
</span></span><span style="display:flex;"><span>set-timezone ZONE        Set system time zone
</span></span><span style="display:flex;"><span>list-timezones           Show known time zones
</span></span><span style="display:flex;"><span>set-local-rtc BOOL       Control whether RTC is in local time
</span></span><span style="display:flex;"><span>set-ntp BOOL             Enable or disable network time synchronization
</span></span></code></pre></div><p>设置时区时会创建一个 <code>/etc/localtime</code> 软链接，指向 <code>/usr/share/zoneinfo/</code> 中的时区文件.</p>
<hr>
<h3 id="systemd-timesyncd">systemd-timesyncd</h3>
<p>提供了时间同步的功能, 基于 <code>SNTP</code> 实现, <code>SNTP</code> 是 <code>NTP</code> 协议的一种简单实现, 不需要长时间的存储状态, 适用与非服务器的桌面系统和嵌入式系统.</p>
<p><code>deepin</code> 的时间同步功能就是用它实现的.</p>
<hr>
<h3 id="systemd-timedated">systemd-timedated</h3>
<p><code>timedatectl</code> 的功能的 <code>dbus</code> 接口, 提供的方法和属性如下:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ gdbus introspect --system --dest org.freedesktop.timedate1 --object-path /org/freedesktop/timedate1
</span></span><span style="display:flex;"><span>node /org/freedesktop/timedate1 <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>interface org.freedesktop.timedate1 <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>methods:
</span></span><span style="display:flex;"><span>SetTime<span style="color:#f92672">(</span>in  x usec_utc,
</span></span><span style="display:flex;"><span>in  b relative,
</span></span><span style="display:flex;"><span>in  b user_interaction<span style="color:#f92672">)</span>;
</span></span><span style="display:flex;"><span>SetTimezone<span style="color:#f92672">(</span>in  s timezone,
</span></span><span style="display:flex;"><span>in  b user_interaction<span style="color:#f92672">)</span>;
</span></span><span style="display:flex;"><span>SetLocalRTC<span style="color:#f92672">(</span>in  b local_rtc,
</span></span><span style="display:flex;"><span>in  b fix_system,
</span></span><span style="display:flex;"><span>in  b user_interaction<span style="color:#f92672">)</span>;
</span></span><span style="display:flex;"><span>SetNTP<span style="color:#f92672">(</span>in  b use_ntp,
</span></span><span style="display:flex;"><span>in  b user_interaction<span style="color:#f92672">)</span>;
</span></span><span style="display:flex;"><span>signals:
</span></span><span style="display:flex;"><span>properties:
</span></span><span style="display:flex;"><span>readonly s Timezone <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;Europe/Berlin&#39;</span>;
</span></span><span style="display:flex;"><span>readonly b LocalRTC <span style="color:#f92672">=</span> false;
</span></span><span style="display:flex;"><span>readonly b NTP <span style="color:#f92672">=</span> true;
</span></span><span style="display:flex;"><span>readonly b NTPSynchronized <span style="color:#f92672">=</span> true;
</span></span><span style="display:flex;"><span>readonly t TimeUSec <span style="color:#f92672">=</span> 1467291739170844;
</span></span><span style="display:flex;"><span>readonly t RTCTimeUSec <span style="color:#f92672">=</span> 1467291739000000;
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>;
</span></span></code></pre></div><hr>
<h2 id="timezone">Timezone</h2>
<p>时区列表是由 <code>tzdata</code> 这个包提供的, 安装在 <code>/usr/share/zoneinfo/</code> 下面.</p>
<p>有些地方为了节约能源, 在夏天时会把时间调慢. 当时区中有夏令时系统会自动调整时间.</p>
<p>使用 <code>zdump</code> 命令可以查看时区的详细信息, 如查询 <code>America/New_York</code> 的夏令时时区信息：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>~  zdump -v -c 2016,2017 America/New_York
</span></span><span style="display:flex;"><span>America/New_York  Sun Mar <span style="color:#ae81ff">13</span> 06:59:59 <span style="color:#ae81ff">2016</span> UT <span style="color:#f92672">=</span> Sun Mar <span style="color:#ae81ff">13</span> 01:59:59 <span style="color:#ae81ff">2016</span> EST isdst<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span> gmtoff<span style="color:#f92672">=</span>-18000
</span></span><span style="display:flex;"><span>America/New_York  Sun Mar <span style="color:#ae81ff">13</span> 07:00:00 <span style="color:#ae81ff">2016</span> UT <span style="color:#f92672">=</span> Sun Mar <span style="color:#ae81ff">13</span> 03:00:00 <span style="color:#ae81ff">2016</span> EDT isdst<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span> gmtoff<span style="color:#f92672">=</span>-14400
</span></span><span style="display:flex;"><span>America/New_York  Sun Nov  <span style="color:#ae81ff">6</span> 05:59:59 <span style="color:#ae81ff">2016</span> UT <span style="color:#f92672">=</span> Sun Nov  <span style="color:#ae81ff">6</span> 01:59:59 <span style="color:#ae81ff">2016</span> EDT isdst<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span> gmtoff<span style="color:#f92672">=</span>-14400
</span></span><span style="display:flex;"><span>America/New_York  Sun Nov  <span style="color:#ae81ff">6</span> 06:00:00 <span style="color:#ae81ff">2016</span> UT <span style="color:#f92672">=</span> Sun Nov  <span style="color:#ae81ff">6</span> 01:00:00 <span style="color:#ae81ff">2016</span> EST isdst<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span> gmtoff<span style="color:#f92672">=</span>-18000
</span></span></code></pre></div><p>其中 <code>isdst=1</code> 就表示夏令时被启用.</p><ul class="pa0">
  
   <li class="list di">
     <a href="/tags/timezone" class="link f5 grow no-underline br-pill ba ph3 pv2 mb2 dib black sans-serif">timezone</a>
   </li>
  
   <li class="list di">
     <a href="/tags/localtime" class="link f5 grow no-underline br-pill ba ph3 pv2 mb2 dib black sans-serif">localtime</a>
   </li>
  
   <li class="list di">
     <a href="/tags/rtc" class="link f5 grow no-underline br-pill ba ph3 pv2 mb2 dib black sans-serif">rtc</a>
   </li>
  
   <li class="list di">
     <a href="/tags/utc" class="link f5 grow no-underline br-pill ba ph3 pv2 mb2 dib black sans-serif">utc</a>
   </li>
  
</ul>
<div class="mt6 instapaper_ignoref">
      
      
      </div>
    </div>

    <aside class="w-30-l mt6-l">




</aside>

  </article>

    </main>
    <footer class="bg-black bottom-0 w-100 pa3" role="contentinfo">
  <div class="flex justify-between">
  <a class="f4 fw4 hover-white no-underline white-70 dn dib-ns pv2 ph3" href="https://jouyouyun.github.io" >
    &copy;  jouyouyun 2023 
  </a>
    <div>
<div class="ananke-socials">
  
    <a href="https://github.com/jouyouyun" target="_blank" class="github ananke-social-link link-transition stackoverflow link dib z-999 pt3 pt0-l mr1" title="GitHub link" rel="noopener" aria-label="follow on GitHub——Opens in a new window">
      
        <span class="icon"><svg style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512"  xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
  <path d="M256,32C132.3,32,32,134.8,32,261.7c0,101.5,64.2,187.5,153.2,217.9c11.2,2.1,15.3-5,15.3-11.1   c0-5.5-0.2-19.9-0.3-39.1c-62.3,13.9-75.5-30.8-75.5-30.8c-10.2-26.5-24.9-33.6-24.9-33.6c-20.3-14.3,1.5-14,1.5-14   c22.5,1.6,34.3,23.7,34.3,23.7c20,35.1,52.4,25,65.2,19.1c2-14.8,7.8-25,14.2-30.7c-49.7-5.8-102-25.5-102-113.5   c0-25.1,8.7-45.6,23-61.6c-2.3-5.8-10-29.2,2.2-60.8c0,0,18.8-6.2,61.6,23.5c17.9-5.1,37-7.6,56.1-7.7c19,0.1,38.2,2.6,56.1,7.7   c42.8-29.7,61.5-23.5,61.5-23.5c12.2,31.6,4.5,55,2.2,60.8c14.3,16.1,23,36.6,23,61.6c0,88.2-52.4,107.6-102.3,113.3   c8,7.1,15.2,21.1,15.2,42.5c0,30.7-0.3,55.5-0.3,63c0,6.1,4,13.3,15.4,11C415.9,449.1,480,363.1,480,261.7   C480,134.8,379.7,32,256,32z"/>
</svg>
</span>
      
<span class="new-window"><svg  height="8px"  style="enable-background:new 0 0 1000 1000;" version="1.1" viewBox="0 0 1000 1000"  xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
<path d="M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z" style="fill-rule:evenodd;clip-rule:evenodd;"/>
</svg>
</span></a>
  
</div>
</div>
  </div>
</footer>

  </body>
</html>
